Recent Technotes


Note: For archived 1999 Updates, check out: What's New 1999.

May 2000


New

  • TN1197: QuickTime 4.1.1/4.1.2

    QuickTime 4.1.1/4.1.2 can be described as a minimal-changes releases that provide a number of miscellaneous bug fixes.

    This Technote describes the changes made between the release of QuickTime 4.1 and the update releases of QuickTime 4.1.1 and 4.1.2.

Updated

  • TN1186: How To Be a Good Multiple Users Citizen

    This Technote describes the new APIs provided by the Multiple Users technology introduced in Mac OS 9.0. It also answers the most frequent questions from developers and provides a few workarounds for commonly encountered problems. This Note is directed at application developers who are accessing folders within the System Folder or using the FindFolder API and need to pay extra attention to the access privileges of those folders.



April 2000


New

  • TN1196: Cursor Components

    This Technote describes the building and use of cursor components. Cursor components allow you to build custom color cursors completely under your control. Unlike previous color cursors on the Macintosh, these components allow much more flexibility.

    Cursors created utilizing this component are pretty unlimited. They could be extra large, thousands or millions of colors, transparent, situationally intelligent, and/or animated.

    This Note is directed at developers who want to utilize this component of Mac OS 9.

  • TN1195: Tagging Handle Data References in QuickTime 4

    This Technote discusses the use of data reference extensions, which are used by QuickTime 4 to tag handle data references. Data reference extensions give you the ability to associate MacOS file type, MIME type, initialization data and/or file name information with a given file.

    This Note is directed at developers who want to take advantage of this new feature in QuickTime 4.

  • TN1194: Mac OS Update 9.0.4

    This Technote describes bug fixes and enhancements present in Mac OS 9.0.4.

    Mac OS 9.0.4 provides support for new Apple hardware platforms released since Mac OS 9. As such, during development some interim versions of the software were released on some hardware platforms. Where relevant, the particular release where a feature was introduced is mentioned. Version numbers for these releases include Mac OS 9.0.2, Mac OS 9.0.3, and Mac OS 9.0.4. Mac OS 9.0.4 includes all of the features and enhancements that were present in Mac OS 9.0.2 and Mac OS 9.0.3. There was no public release of Mac OS 9.0.1.

    All developers interested in creating products compatible with Mac OS and being aware of issues relevant to creating products for use with the Mac OS will want to review this document.


Updated

  • TN1176: Mac OS 9

    This Technote discusses changes and corrections in the next generation of Mac OS: Mac OS 9. This system follows Mac OS 8.6 and contains several enhancements and revised features. All developers interested in creating products compatible with Mac OS 9 will want to review this document.

  • TN1104: Interrupt-Safe Routines

    The traditional Mac OS has a badly defined set of heterogeneous programming environments. In some of these environments, your code can access some system services but not others. Furthermore, the names given to these environments are often overloaded and confusing. This results in a lot of programmer confusion.

    This Technote attempts to clear up this confusion by assigning each of the execution levels a unique name, describing how and why your code might find itself running at a particular execution level, and outlining the restrictions your code might face when running at that level.

    This Technote is important for anyone programming any Mac OS code that might run at "interrupt time," and vital for anyone doing system-level programming under the traditional Mac OS.

  • TN1187: Digital CD Audio

    Starting with Mac OS 9.0 there is a new way of playing CD audio -- digitally. Pure digital data is read from the CD, played through the Sound Manager as a PCM (Pulse Code Modulation -- standard uncompressed audio) data stream, and then sent out to the speakers (where your ears require that it be converted back to an analog signal).

    This Technote describes how an application uses the new digital CD audio support and what a CD or DVD driver needs to do to support playing audio digitally.



March 2000


Updated

  • TN1176: Mac OS 9

    This Technote discusses changes and corrections in the next generation of Mac OS: Mac OS 9. This system follows Mac OS 8.6 and contains several enhancements and revised features. All developers interested in creating products compatible with Mac OS 9 will want to review this document.

  • TN1154: Debugging Java Code With MacsBug

    MacsBug, the low-level debugger for the Mac OS, seems unlikely to be useful for debugging a very high-level language like Java. Au contraire! The MRJ plug-in 'dcmd' for MacsBug adds a number of commands that can help you debug everything from deadlocks to memory leaks. This Technote introduces MacsBug for those not familiar with it, and shows how to use the MRJ commands to debug your Java code.

  • TN1071: Working with Multiprocessing Services

    This Technote describes the basic steps required to use the Apple Multiprocessing API and attempts to clarify the things that can and cannot be done from tasks created using that API. It is directed primarily at developers working with, or preparing to work with the Multiprocessing API. Although the examples given are aimed at application writers, it contains information useful for system level engineers also.



February 2000


New

  • TN1193: How to structure your handleCheckUpdate callback

    A JManager host application should call JMFrameUpdate from its window-drawing code, and should also implement a checkUpdate callback that will call JMFrameUpdate if the window's update region is non-empty. (CheckUpdate is called by the AWT to fix up the display immediately if part of the window may have been invalidated by some AWT action.)

    This results in AWT being called while the window is in a funny state -- the BeginUpdate call has clipped its visRgn down to just the area needing updating, so any drawing calls can only draw in that area.

    The problem comes in if another thread gets control before the JManager call completes. This might be any other thread, and it may perform other AWT operations like graphics-based drawing, moving components, or updating controls. Since whatever it draws will be clipped down to the window's updateRgn, some parts of the window may not be updated, which looks ugly. This Technote addresses how to fix this problem.


Updated

  • TN1168: The Care And Feeding of Runtime.exec

    Runtime.exec( ) is probably the single least cross-platform-compatible part of the Java API set. It assumes the existence of a command-line interface to the OS and the ability to launch arbitrary apps that can accept arbitrary parameters. Nevertheless, there are times when you need to use it -- for instance, to open a URL in a Web browser or to spawn a new Java process. This technote describes MRJ 2.x's implementation of Runtime.exec, and how it differs from that of the JDK.

  • TN1162: Introduction to MRJ Scripting with AppleScript for Java

    With the release of MRJ 2.1, AppleScript support in Java applets and applications is now a reality. This Technote covers the technical information you will need to take full advantage of AppleScript in your Java application.

    Apple Applet Runner and the MRJShellLib (inside of MRJLib) support the Macintosh Open Scripting Architecture. As a result, the Apple Applet Runner, the applets it runs, and applications created with JBindery can be scripted by AppleScript or any other OSA scripting language. The only additional work required (for scripting of java-based applications) is the inclusion of the scripting resources 'aete' and 'scsz'. No other specific scripting support is required from the Java applet or application. This enables MRJ users to download Java applets or applications from the Internet and use them as scriptable components on the Macintosh.

    This document provides a brief overview of MRJ Scripting. It assumes that you are familiar with AppleScript and the OSA Architecture. As more information about MRJ Scripting becomes available, it will be posted on the MRJ Developer Page.



January 2000


Updated

  • TN1181: Sherlock's Find by Content Text Extractor Plug-ins

    This Technote describes the API for creating Find By Content Text Extractor Plug-ins. Text Extractor Plug-ins are used by Find by Content to extract the textual information stored in a document when it is creating indexes and summarizing files. By doing so, it is possible for users to avoid indexing peripheral data such as formatting commands, HTML tags, and other data that does not relate to the information stored in the document. By creating Text Extractor Plug-ins for their document types, developers make it possible for users to conduct meaningful searches for information stored in documents created by their applications.

    Text Extractor Plug-ins can be created for use with Mac OS 8.6 and later. Mac OS 8.6 was shipped with two Text Extractor Plug-ins: the "HTML Text Extractor" and the "PDF Text Extractor." The "HTML Text Extractor" strips the HTML tags from HTML files and returns the text stored therein; the "PDF Text Extractor" returns the textual information from Adobe®’s Portable Document Format (PDF) files. In Mac OS 8.5, indexing HTML files meant that both the text stored in the document and the HTML tags were incorporated into indexes. Furthermore, PDF files were excluded from the indexing process. In Mac OS 8.6, meaningful textual information extracted from these files is incorporated into index files used by Find By Content.

    This Technote provides information necessary for creating and installing Text Extractor Plug-ins. In addition, an annotated example Text Extractor Plug-in is provided. Developers can easily modify this example to create their own plug-in for use with their own file formats.

  • TN1150: HFS Plus Volume Format

    This Technote describes the on-disk format for an HFS Plus volume. It does not describe any programming interfaces for HFS Plus volumes.

    This technote is directed at developers who need to work with HFS Plus at a very low level, below the abstraction provided by the File Manager programming interface. This includes developers of disk recovery utilities and programmers implementing HFS Plus support on other platforms.

    This technote assumes that you have a conceptual understanding of the HFS volume format, as described in Inside Macintosh: Files.

  • TN1145: Living in a Dynamic TCP Environment

    This Technote describes some of the intricacies of dealing with TCP/IP in a dynamic environment, such as that provided by Open Transport. Specifically, it describes how to write Open Transport code which correctly handles multiple IP addresses, dial-up links, sleep and wakeup on PowerBooks, modem disconnection, and user reconfiguration.

    This Note is directed at all developers using Open Transport TCP/IP services.

  • TN1104: Interrupt-Safe Routines

    The traditional Mac OS has a badly defined set of heterogeneous programming environments. In some of these environments, your code can access some system services but not others. Furthermore, the names given to these environments are often overloaded and confusing. This results in a lot of programmer confusion.

    This Technote attempts to clear up this confusion by assigning each of the execution levels a unique name, describing how and why your code might find itself running at a particular execution level, and outlining the restrictions your code might face when running at that level.

    This Technote is important for anyone programming any Mac OS code that might run at "interrupt time," and vital for anyone doing system-level programming under the traditional Mac OS.

  • TN1060: Controlling Apps with Synthesized Events, or jGNEFilter - the Untold Story

    Until now, jGNEFilter has been "under documented," with only vague mentions appearing in Technote TB 11: GetNextEvent; Blinking Apple Menu. jGNEFilter is the name of a mechanism by which programs can obtain access to each EventRecord just before the event is sent to the caller of GetNextEvent or WaitNextEvent.

    Using jGNEFilter, your programs can customize most event-driven interaction with the user, including but not limited to such things as monitoring keystrokes, and programmatically simulating some kinds of user activity. Also, without being an application or driver, your program can arrange to be called periodically at a time when it's safe to call Memory Manager (and the high-level managers which depend on Memory Manager).

    Developers who would like to make use of jGNEFilter - or developers who are already bravely making use of it even in the face of inadequate documentation - should read this Technote.


Technotes